/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CiaAerea;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Thomas
 */
public class ReservaSerialize implements Serializable{
    
    private int codReserva;
    private char fileiraAssento;
    private int numeroAssento;
    private boolean isExecutiva;
    
    private Voo vooReserva;
    private Cliente clienteReserva;
    
    public ReservaSerialize (){
        
    }
    
    public ReservaSerialize (int codReserva, char fileiraAssento, int numeroAssento, boolean executivo, Voo voo, Cliente cliente)
    {
        this.codReserva = codReserva;
        this.fileiraAssento = fileiraAssento; 
        this.numeroAssento = numeroAssento;
        this.isExecutiva = executivo;
        
        this.vooReserva = voo;
        this.clienteReserva = cliente;
        
    }
    
    public int getcodReserva(){
        return codReserva;
    }
    
    public void setcodReserva(int codigo){
        codReserva = codigo;
    }
    
    public char getFileiraAssento() {
        return fileiraAssento;
    }

    public void setFileiraAssento(char fileiraAssento) {
            this.fileiraAssento = fileiraAssento;
    }

    public int getNumeroAssento() {
        return numeroAssento;
    }

    public void setNumeroAssento(int numeroAssento) {
        if(numeroAssento>=0)
        {
        this.numeroAssento = numeroAssento;
        }
        else
        {
            System.out.println("numeroAssento não válido");
        }
    }

    public int getCodReserva() {
        return codReserva;
    }

    public void setCodReserva(int codReserva) {
        this.codReserva = codReserva;
    }

    public Voo getVooReserva() {
        return vooReserva;
    }

    public void setVooReserva(Voo vooReserva) {
        this.vooReserva = vooReserva;
    }

    public Cliente getClienteReserva() {
        return clienteReserva;
    }

    public void setClienteReserva(Cliente clienteReserva) {
        this.clienteReserva = clienteReserva;
    }

    public boolean isIsExecutiva() {
        return isExecutiva;
    }

    public void setIsExecutiva(boolean isExecutiva) {
        if(isExecutiva == true || isExecutiva == false)
        {
        this.isExecutiva = isExecutiva;
        }
        else
        {
            System.out.println("isExecutiva não válido");
        }
    }
    
    //Funções Serializable
    public void escrever(ReservaSerialize dados) throws Exception
    {
        try
        {
            //Verifica se arquivo é existente
            
            File arquivo = new File("reserva_"+Integer.toString(dados.getCodReserva())+".ser");
            if(arquivo.exists()){
                throw new Exception("Arquivo já existente!");
            }
            else{
            ObjectOutputStream saida = new ObjectOutputStream(new FileOutputStream("reserva_"+codReserva+".ser"));
            saida.writeObject(dados);
            }
            
        }catch(IOException ioException)
        {
            throw new Exception("Erro ao serializar");
        }
    }
    
    public ReservaSerialize ler(String cod)
    {
        ReservaSerialize dados = new ReservaSerialize();
        try
        {
            ObjectInputStream entrada = new ObjectInputStream(new FileInputStream("reserva_"+codReserva+".ser"));
             
            dados = (ReservaSerialize) entrada.readObject(); 
            
        }catch(IOException ioException)
        {
            System.err.println(ioException.getMessage());
       
         } catch (ClassNotFoundException ex) {
            Logger.getLogger(DestinoSerialize.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally
        {
           return dados;  
        } 
    
    }
    
    public void remover(String cod)
    {
        try
        {
            //FALTA IMPLEMENTAR AINDA
           File file = new File("reserva_"+codReserva+".ser");
           
           if(file.delete())
           {
               JOptionPane.showMessageDialog(null, "Arquivo deletado com sucesso!");
           }
           else
           {
               JOptionPane.showMessageDialog(null, "Problemas ao deletar o arquivo.");
           }
           
            
            
        }catch(Exception e)
        {
            System.err.println(e.getMessage());
        }
    }
    
    public void alterar(ReservaSerialize dados) throws Exception{
        
        try{
        ObjectOutputStream saida = new ObjectOutputStream(new FileOutputStream("reserva_"+codReserva+".ser"));
        saida.writeObject(dados);
        }catch(Exception e){
            throw new Exception("Erro ao Alterar Reserva!");
        }
            
        
    }
    
}
